/*
 * DosPisos.cpp
 *
 *  Created on: 27/04/2013
 *      Author: juan
 */

#include "DosPisos.h"
#define ALTURA_CILINDROS (3.0)
#ifndef CANT_ESCALONES
#define CANT_ESCALONES (10)
#endif
#define ESCALA_ESCALERA_Z (0.70)
#define TRASLADO_ESCALERA_X (2.4)
#define TRASLADO_ESCALERA_Y (-0.3)

using namespace std;

DosPisos::DosPisos(GLuint program, GLuint segments) :
		Figure(program) {
	this->PrimerPiso = new PisoInferior(program, segments);
	this->SegundoPiso = new PisoInferior(program, segments);
	this->PrimeraEscalera = new Escalera(program);
	this->SegundaEscalera = new Escalera(program);
}

DosPisos::~DosPisos() {
	delete (PrimerPiso);
	delete (SegundoPiso);
	delete (PrimeraEscalera);
	delete (SegundaEscalera);
}

void DosPisos::draw(GLuint program, glm::mat4 & world_matrix) {
	glm::mat4 matriz = world_matrix * this->model_matrix;
	this->PrimerPiso->draw(program, matriz);
	glm::mat4 m_escalera = glm::mat4(1.0f);
	m_escalera = glm::scale(matriz, glm::vec3(1.0f, 0.8f, ESCALA_ESCALERA_Z));
	m_escalera = glm::translate(m_escalera, glm::vec3(TRASLADO_ESCALERA_X, TRASLADO_ESCALERA_Y, 0.0f));
	this->PrimeraEscalera->draw(program, m_escalera);
	m_escalera = glm::translate(m_escalera,
			glm::vec3(1.92 * TRASLADO_ESCALERA_X, 1.85f, ALTURA_CILINDROS / ESCALA_ESCALERA_Z));
	m_escalera = glm::scale(m_escalera, glm::vec3(-1.0f, -1.0f, 1.0f));
	//m_escalera = glm::translate(m_escalera, glm::vec3(-TRASLADO_ESCALERA_X,0.0f,0.0f));
	this->SegundaEscalera->draw(program, m_escalera);
	glm::mat4 m = glm::mat4(1.0f);
	m = glm::translate(matriz, glm::vec3(0.0f, 0.0f, ALTURA_CILINDROS)); //Ubico segundo piso.
	this->SegundoPiso->draw(program, m);
}

void DosPisos::set_textures(unsigned int id_floor_texture, unsigned int id_stairs_texture,
		unsigned int id_columns_texture) {

	PrimeraEscalera->set_texture_id(id_stairs_texture);
	SegundaEscalera->set_texture_id(id_stairs_texture);

	PrimerPiso->set_textures(id_floor_texture, id_columns_texture);
	SegundoPiso->set_textures(id_floor_texture, id_columns_texture);

}
